package homework.api.day04;

import java.util.*;

public class ListDemo {
    public static void main(String[] args) {
        //内部使用链表(不常用),查询性能不好，头尾增删好
        //List<String> list = new LinkedList<>();
        //内部使用数组实现(常用),查询好，增删性能不好
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("five");
        list.add("four");
        list.add("two");
        System.out.println("list----原数据"+list);

        //get()，根据下标获取元素，同数组，下标0~size()
        String s = list.get(3);
        System.out.println("下标为3的元素："+s);

        //set()，根据下标替换集合中的元素，返回值为旧的元素
        String old = list.set(3,"4");
        System.out.println("set后:"+list);
        System.out.println("old元素："+old);

        //remove()删除指定位置的元素，并返回删除的元素。Collection中已存在，所以此方法为重载
        String dele = list.remove(3);
        System.out.println("remove后："+list);
        System.out.println("删除元素:"+dele);

        //add()将元素写入指定位置，理解为插入。Collection中已存在，所以此方法为重载
        list.add(3,"10000");
        System.out.println("add后："+list);


        //subList():获取集合的子集，含头不含尾
        /** 注意：获取子集后，原集合改变元素值，会视情况影响子集
         * 原集合只要不进行增删操作改变长度，子集就一直可用
         * 若原集合改变长度，则子集再进行任何操作都会异常，必须重新获取子集
         *  */
        List<String> list2 = list.subList(1,4);
        System.out.println("sublist:"+list2);

        list.set(3,"9999");
        System.out.println(list);
        System.out.println(list2);

        list.remove(5);//执行后，子集list2不能再进行任何操作，要操作子集，只能重新获取
        System.out.println(list);


        //Set去重操作
        System.out.println("Set----------------");
        list.add("two");
        list.add("four");
        System.out.println("重复的list："+list);
        Set<String> set = new HashSet<>();
        set.addAll(list);
        System.out.println("去重的set:"+set);

    }
}
